1. Technical Field
The present invention relates in general to a system and method for improving software lock efficiency. More specifically, the present invention relates to a system and method for increasing and decreasing thread priorities during lock processing.
2. Description of the Related Art
Modern computer systems perform multiple tasks seemingly at the same time. Using multitasking, the processor handles instructions from multiple processes by servicing the processes in a round-robin fashion. In this manner, a process is executed by the processor for a small amount of time before it is time sliced, it's settings and register values saved, a different process is executed by the processor. These processes, or “threads,” are a stream of instructions corresponding to one or more software applications that require handling by the processor. The terms “process” and “thread” are used herein interchangeably to note a stream of executable instructions that is executed by a processor. By quickly moving from one process to the next, it appears that each process is executed simultaneously.
The operating system regulates access to the processor. Most operating systems employ priority-based scheduling algorithms for this purpose. Priorities are assigned to programs according to the importance and/or urgency of the functions that are performed on behalf of the computer system. The operating system uses these priorities to determine when and for how long a process or unit of executable code within the programs (hereafter, “thread”) is granted access to the processor. Generally, priority-based scheduling allocates processor time to optimize the computer system's performance. For example, the computer system may be optimized in order to minimize user input response time, maximize throughput, and/or guarantee predictable, or deterministic, execution times for application programs.
Many resources within a computer system are shared by the various programs being executed by the processor. In many cases, these resources need to be serialized so that only one process is using the resource in any given time. In order to serialize access to the resource, software locks are often used. When a resource is being used by another process, a process will wait on the lock. When the lock is released by the other process, the process will attempt to acquire the lock. Other processes will be unable to use the resource until the process releases the lock. Because of this serialization, efficient use of shared resources helps improve overall system throughput. This is especially true of resources and corresponding locks that are used by many processes.
In an operating system using a priority-based scheduling algorithm, a process with an inferior priority may be preempted by a process of the superior priority. This is true even when the inferior priority process currently possesses a critical resource. A challenge in traditional operating systems is the apparent conflict between preempting inferior priority processes and, at the same time efficiently handling the use of critical resources.
What is needed, therefore, is a system and method to temporarily alter a thread's priority without overly impacting the priority-based scheduling algorithm being employed by the operating system. What is also needed is a system and method to allow tuning of software locks corresponding to individual resources in order to maximize system efficiency.